
Security News
Deno 2.2 Improves Dependency Management and Expands Node.js Compatibility
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Tsickle converts TypeScript code into a form acceptable to the Closure Compiler. This allows using TypeScript to transpile your sources, and then using Closure Compiler to bundle and optimize them, while taking advantage of type information in Closure Compiler.
A (non-exhaustive) list of the sorts of transformations Tsickle applies:
goog.module
modulesdeclare
, see below)export * from ...
into a form Closure acceptsIn general the goal is that you write valid TypeScript and Tsickle handles making it valid Closure Compiler code.
We already use tsickle within Google to minify our apps (including those using Angular), but we have less experience using tsickle with the various JavaScript builds that are seen outside of Google.
We would like to make tsickle usable for everyone but right now if you'd like to try it you should expect to spend some time debugging and reporting bugs.
npm i
to install the dependencies.Tsickle works by wrapping tsc
. To use it, you must set up your project such
that it builds correctly when you run tsc
from the command line, by
configuring the settings in tsconfig.json
.
If you have complicated tsc command lines and flags in a build file (like a
gulpfile etc.) Tsickle won't know about it. Another reason it's nice to put
everything in tsconfig.json
is so your editor inherits all these settings as
well.
Run tsickle --help
for the full syntax, but basically you provide any tsickle
specific options and use it as a TypeScript compiler.
Closure and TypeScript are not identical. Tsickle hides most of the differences, but users must still be aware of some differences.
declare
Any declaration in a .d.ts
file, as well as any declaration tagged with
declare ...
, is intepreted by Tsickle as a name that should be preserved
through Closure compilation (i.e. not renamed into something shorter). Use it
any time the specific string names of your fields are significant. That would
most often happen when the object either coming from outside your program, or
being passed out of the program.
Example:
declare interface JSONResult {
username: string;
}
let r = JSON.parse(input) as JSONResult;
console.log(r.username);
By adding declare
to the interface (or if it were in a .d.ts
file), Tsickle
will inform Closure that it must use exactly the field name .username
(and not
e.g. .a
) in the output JS. This matters for this example because the input
JSON probably uses the string 'username'
and not whatever name Closure would
invent for it. (Note: declare
on an interface has no additional meaning in
pure TypeScript.)
An exporting decorator is a decorator that has @ExportDecoratedItems
in its
JSDoc.
The names of elements that have an exporting decorator are preserved through
the Closure compilation process by applying an @export
tag to them.
Example:
/** @ExportDecoratedItems */
function myDecorator() {
// ...
}
@myDecorator()
class DoNotRenameThisClass { ... }
gulp watch
executes the unit tests in watch mode (use gulp test.unit
for a
single run),gulp test.e2e
executes the e2e tests,guld test.golden
executes the golden tests,gulp test.check-format
checks the source code formatting using
clang-format
,gulp test
runs unit tests, e2e tests and checks the source code formatting.Export the environment variable UPDATE_GOLDENS=1
to have the test suite
rewrite the golden files when you run it.
Export the environment variable TEST_FILTER
, a regex, to limit the end-to-end
tests (found in test_files/...
) run tests with a name matching the regex.
On a new branch, run npm version <major|minor|patch|...> -m 'rel: %s'
(see
npm help version
for details) to update the version in package.json
, commit
the changes, and create a git tag. Push the branch, get it reviewed and merged,
then run npm publish
from the master branch (you must be logged into the
angular
shared npm account).
FAQs
Transpile TypeScript code to JavaScript with Closure annotations.
The npm package tsickle receives a total of 127,006 weekly downloads. As such, tsickle popularity was classified as popular.
We found that tsickle demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Security News
React's CRA deprecation announcement sparked community criticism over framework recommendations, leading to quick updates acknowledging build tools like Vite as valid alternatives.
Security News
Ransomware payment rates hit an all-time low in 2024 as law enforcement crackdowns, stronger defenses, and shifting policies make attacks riskier and less profitable.